#ifndef __LOGGER_HPP_INCLUDED__
#define __LOGGER_HPP_INCLUDED__

#include <string>
#include <iosfwd>
#include <boost/shared_ptr.hpp>

class logger {
	public:
		enum log_level_type { info, warn, error, debug };

        static boost::shared_ptr<logger> create(const std::string& file_name)
        {
            return boost::shared_ptr<logger>(new logger(file_name));
        }

		void log(log_level_type level, const std::string& log_string);
	private:
        explicit logger(const std::string& file_name);

		std::string _file_name;
};

std::ostream& operator << (std::ostream& stream, const logger::log_level_type& level);

#endif  //__LOGGER_HPP_INCLUDED__
